/***********************************************************************
 * 描述: 	数字控件私有实现
 * File:    cxispinbox_p.h
 * Author:  chenanqi@mozihealthcare.cn
 * Date:    2025/10/10 14:16
 * Update:  
 **********************************************************************/

#ifndef CXISPINBOX_P_H
#define CXISPINBOX_P_H

#include <controls/spinbox/cxispinbox.h>

#include <QPainter>
#include <QStyleOption>
class QToolButton;

class CxiSpinBoxPrivate
{
	Q_DISABLE_COPY(CxiSpinBoxPrivate)
	Q_DECLARE_PUBLIC(CxiSpinBox)

private:
	/**
	 * 构造函数
	 * @param q
	 */
	explicit CxiSpinBoxPrivate(CxiSpinBox* q);
	/**
	 * 析构函数
	 */
	~CxiSpinBoxPrivate();
	/**
	 * 初始化 初始化按钮，以及信号槽
	 */
	void init();
	/**
	 * 按钮布局设置
	 */
	void layoutButtons();
	/**
	 * 焦点进入事件处理
	 */
	void onFocusIn(QFocusEvent* event);
	/**
	 * 焦点离开事件处理
	 */
	void onFocusOut(QFocusEvent* event);
	/**
	 * 更新数右侧按钮的显示隐藏
	 */
	void updateNumberEditorStyle();
	/**
	 * 格式化数字
	 */
	QString formatNumber(double val) const;
	/**
	 * 计算值
	 */
	void calculateNextValue(bool increase);

public:
	// 属性isAllowNegativeNumber 是否为负数 true表示允许为负数
	bool isAllowNegativeNumber = true;
	// 属性isString 是否为字符串 true表示为字符串
	bool isString = false;
	// 属性isDecimal 是否为小数 true表示为小数
	bool isDecimal = true;
	// 步长 默认为1
	qreal increment = 1.0;
	// 小数位数 默认六位
	int decimal = 6;
	// 当前值
	QVariant value;
	// 最小值
	QVariant minimum;
	// 最大值
	QVariant maximum;
	// 右侧向上微调按钮
	QToolButton* upButton = nullptr;
	// 右侧向下微调按钮
	QToolButton* downButton = nullptr;
	// 数字显示格式 默认无格式。具体在CxiSpinBox中
	CxiSpinBox::FormatStyle formatStyle = CxiSpinBox::Default;
	// 数字编辑样式 默认显示右侧按钮。具体在CxiSpinBox中
	CxiSpinBox::NumberEditorStyle numberEditorStyle = CxiSpinBox::NumericUpDown;


private:
	CxiSpinBox* const q_ptr;
};


#endif//CXISPINBOX_P_H
